The proliferation of client computing devices—such as smart phones and tablets—has drastically changed the manner in which software applications are designed and executed. Some software applications—such as games—are designed to run independently on the client computing device and require little or no interaction with a server. In contrast, some software applications—such as photo sharing applications and data backup applications—rely on accessing server computing devices that are designed to interact with the software applications. For example, many existing computing devices are configured to upload new data at regular intervals so that users can easily synchronize their data across other devices, or easily recover/transition their data when new computing devices are acquired.
Notably, the considerable scale of computing devices has presented new challenges with respect to reliably providing services to the computing devices. For example, some regions can include a large number of computing devices (e.g., on the order of millions) seeking to upload data to a relatively small number of servers (e.g., on the order of thousands), which can often result in overloaded servers especially when taking expected server failure rate into account. Accordingly, there exists a need to provide an architecture that can dependably and flexibly provide services even in situations where hardware failures and connectivity issues occur on a regular basis.